PertinoでPrivateなEC2インスタンスにリモートアクセスする
ども、大瀧です。
AWS環境の導入支援でよく課題に挙がるものとして、"PrivateなEC2インスタンスへのメンテナンスアクセス"があります。
AWSというとパプリッククラウドとしてインターネット経由でのアクセスが連想されますが、Amazon VPCではインターネットとの相互接続を持たないPrivateなEC2インスタンスを構成することができます。Webシステムの場合はAPサーバーやDBサーバーなどDMZ領域に置かないサーバー用途で設定することがあり、業務システムの場合は、VPNやDirect Connectでオンプレミスと接続してVPC全体をPrivate構成とすることもあります。一方で弊社のような導入支援やソフトウェア開発に参加する協力会社など、ユーザーのオンプレミス以外のネットワークからインターネット経由で接続したいというニーズもあり、どうやってアクセスするか検討する必要が出てくるわけです。
踏み台サーバーを経由したり、特定のIPのみインターネットへのルーティングを設定する方法などがありますが、今回はSSL-VPNのPertinoを利用したリモートアクセスによるPrivateなEC2インスタンスへの接続をご紹介したいと思います。
Pertinoとは
Pertino(パティーノ or パチーノ?)は、Pertino社が提供するSSL-VPNサービスです。一般に言う中継サーバー型SSL-VPNで、中継サーバーが分散構成になっているのが特徴です。勢いで"Pertinoシリーズ"を作って本記事をその1本目にしてしまったので、その辺りはまた別の記事で紹介したいと思います。
EC2側は中継サーバーとSSLセッションを張れればOKですので、PrivateサブネットからNATインスタンスやオンプレミスを経由する片方向のインターネット接続で対応できるメリットがあります。NATインスタンス経由での構成図を示します。
今回はNATインスタンス(≒AWSのインターネットゲートウェイ)経由で中継サーバーにアクセスしていますが、前述のようにVPNやDirect Connect経由で中継サーバーにアクセスする構成でも良いでしょう。
Pertinoのサインアップと初期設定
3ノードまでの無料プランがあるので、今回はそれで試してみます。http://pertino.com/にアクセスし、右上の[Sign up]をクリックします。
無料プランと有料プランの選択画面が出るので[Start your free plan]をクリックします。
画面右側のフォームに必要事項を入力し、[Register]で登録完了です。
続いて、初期セットアップ画面に遷移します。[Next]をクリックします。
ここでは、Networkを作成するためにNetwork名を入力します。PertinoのNetworkは、SSL-VPNを通して相互接続する仮想ネットワークを指す用語で、このあと登録するPertinoクライアントはここで作成するNetworkに自動で接続、相互に通信できるようになります。今回は適当に「classmethod」で設定し、[Next]をクリックします。
初期セットアップはこれで完了です。以下の[Download Pertino App]リンクから、クライアントのダウンロードページを開き、接続するマシンでクライアントのセットアップを続けていきます。
Pertinoクライアントのセットアップ
クライアントのダウンロードでは、PertinoがサポートするOSの一覧が表示されます。今回は、手元のMBA(Mac OS X)とUbuntuのEC2インスタンスを接続するためにそれぞれにPertinoクライアントをインストールします。
Mac OS Xの場合
ダウンロードページの[Mac]にある[DMG]のリンクからインストーラがダウンロードできます。一般的なアプリケーションのインストールと同様、インストーラを実行しウィザードを進めればインストール完了です。
インストールが終わると、早速クライアントが起動しPertinoのログイン画面が表示されます。先ほど登録したメールアドレスをユーザー名として、パスワードとともに入力、ログインします。
ログインが成功するとクライアントのウィンドウが閉じ、タスクバーに以下のようなアイコンが追加されます。緑のチェックがついていれば、接続成功です。
Pertinoの管理画面に戻ると右側の表示が変わり、1台接続済みであることがわかりますね。[Next]をクリックします。
2台目(接続先デバイス)の登録が促されますがここでは一旦ダッシュボードを表示したいので、再度[Next]をクリックします。
[Close]をクリックして、ウィザードを閉じます。
Networkのダッシュボードが表示されます。この画面では、現在接続中のユーザー数(MEMBERS ONLINE)、接続中のデバイス数(DEVICES ONLINE)、デバイスの登録数(TOTAL DEVICES)が確認できます。
現在は、Mac OSX 1台分が表示されていますね。続いて、EC2にクライアントをインストールします。
Linux(Ubuntu)の場合
Linuxでのインストールは、クライアントダウンロードページにある[Installation Guide]のリンクから確認できます。現在はUbuntu LinuxとCentOSがサポートされ、apt-getないしyumコマンドでインストールします。今回はEC2のUbuntu Server 64bit上でapt-getで試してみました。ガイド記載のコマンドを順番に実行していけばOKです。
ubuntu@ip-172-31-15-129:~$ wget -O - http://reposerver.pertino.com/Pertino-GPG-Key.pub | sudo apt-key add - --2015-02-02 14:14:37-- http://reposerver.pertino.com/Pertino-GPG-Key.pub Resolving reposerver.pertino.com (reposerver.pertino.com)... 54.221.127.124 Connecting to reposerver.pertino.com (reposerver.pertino.com)|54.221.127.124|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1760 (1.7K) [application/octet-stream] Saving to: ‘STDOUT’ 100%[===========================================================================================================>] 1,760 --.-K/s in 0s 2015-02-02 14:14:37 (416 MB/s) - written to stdout [1760/1760] OK ubuntu@ip-172-31-15-129:~$ sudo sh -c "echo 'deb http://reposerver.pertino.com/debs precise multiverse' > /etc/apt/sources.list.d/pertino.list" ubuntu@ip-172-31-15-129:~$ sudo apt-get update && sudo apt-get -y install pertino-client :
クライアントパッケージのインストール中に以下のログイン画面が表示されるので、メールアドレスとパスワードを入力すればインストール完了です。
Authenticating user XXXX@example.com with Pertino ... Default Stack PROD A new group was added to the system, the pertino group. To add users to the group, execute the following: $ addgroup {username} pertino Note: All users who are members of the sudo group were automatically added to this new group. Any of these users who are currently logged in will need to log off before the group membership change will take effect. ubuntu@ip-172-31-15-129:~$
これでインストールとSSL-VPNセッションの接続が完了済みですので、管理画面に戻るとデバイス数が2になっていることが確認できます。ダッシュボード下部の[DeviceView]をクリックすると、接続しているクライアントの情報を確認できます。
SSL-VPNに接続したデバイス同士は、自動で割り当てられるIPアドレス(画面の50.203.XX.XX)、もしくはDNS名(<ホスト名>.<ランダム文字列>.pertino.net)が利用できます。
動作確認
それでは、SSL-VPN経由でMBAからPrivateなEC2インスタンスにアクセスしてみます。
$ ping 50.203.XX.XX PING 50.203.224.4 (50.203.XX.XX): 56 data bytes 64 bytes from 50.203.XX.XX: icmp_seq=0 ttl=64 time=10.277 ms 64 bytes from 50.203.XX.XX: icmp_seq=1 ttl=64 time=11.855 ms 64 bytes from 50.203.XX.XX: icmp_seq=2 ttl=64 time=10.472 ms 64 bytes from 50.203.XX.XX: icmp_seq=3 ttl=64 time=10.791 ms 64 bytes from 50.203.XX.XX: icmp_seq=4 ttl=64 time=12.729 ms 64 bytes from 50.203.XX.XX: icmp_seq=5 ttl=64 time=10.175 ms 64 bytes from 50.203.XX.XX: icmp_seq=6 ttl=64 time=13.703 ms 64 bytes from 50.203.XX.XX: icmp_seq=7 ttl=64 time=11.727 ms 64 bytes from 50.203.XX.XX: icmp_seq=8 ttl=64 time=12.100 ms 64 bytes from 50.203.XX.XX: icmp_seq=9 ttl=64 time=13.312 ms 64 bytes from 50.203.XX.XX: icmp_seq=10 ttl=64 time=12.034 ms ^C --- 50.203.XX.XX ping statistics --- 11 packets transmitted, 11 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 10.175/11.743/13.703/1.153 ms $ ssh ubuntu@50.203.XX.XX The authenticity of host '50.203.XX.XX (50.203.XX.XX)' can't be established. RSA key fingerprint is 28:a2:a2:b5:16:ce:ff:f6:88:f3:ed:1b:9f:1a:a8:23. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '50.203.XX.XX' (RSA) to the list of known hosts. Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-44-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Wed Feb 4 03:36:19 UTC 2015 System load: 0.0 Processes: 99 Usage of /: 11.8% of 7.74GB Users logged in: 0 Memory usage: 8% IP address for eth0: 172.31.38.74 Swap usage: 0% IP address for pertino0: 50.203.224.4 Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 11 packages can be updated. 1 update is a security update. Last login: Wed Feb 4 03:36:20 2015 from XX.XX.XX.XX ubuntu@ip-172-31-38-74:~$
ping、sshともに通りました。アクセスできていますね!注目するべきはpingの応答速度です。今回は東京からのアクセスですが、海外のSSL-VPNサービスだと中継サーバーが遠く応答速度の遅延が予想できたのですが、10ms台という良好な結果になっています。これが、Pertinoの特徴である中継サーバーの分散構成(Pertinoでは、Cloud Network Engineと呼びます)の効果です。日本でも十分実用できるパフォーマンスですね。
なお、EC2インスタンス側ではpertino0というSSL-VPN用の仮想インターフェースで通信するため、セキュリティグループによるフィルタが適用できないことに注意しましょう。必要に応じて、iptablesなどのホストファイヤーウォールによる保護を検討します。
まとめ
Pertinoのリモートアクセスを利用し、PrivateなEC2インスタンスへの接続をご紹介しました。簡単なセットアップ、十分なパフォーマンスが期待できますね。
Pertinoはリモートアクセスの他にクラウド間接続の手段として利用することもできるので、また別の記事でご紹介したいと思います。